<?php
/**
 * Created by PhpStorm.
 * User: yulin
 * Date: 2018-7-9
 * Time: 15:36
 */

namespace app\open\controller;
use app\open\model;
use app\open\validate\CarlifeValidate;
use app\open\validate\CarBrandValidate;
use app\open\validate\CarValidate;

/**
 * @name【2.车辆配备管理】
 * @baseurl【open/Car】
 * @file【Car.php】
 */

class Car extends Base
{
    /**
     * @name【0.1 获取车辆信息】
     * @desc【】
     * @method【post】
     * @param【_list】
     * @return【】
     * @table 【car】
     */
    public function getCar()
    {
        $data = [];
        //调用集成
        $joins = ['area','cartype','company','entrust','brand','model','series','strength'];
        $data['count'] = $this->getCountCommon(new model\Car(),$joins);
        $data['list'] = $data['count'] ? $this->getListOrAll(new model\Car(),$joins) : [];
        return $this->res($data);
    }

    /**
     * @name【1.1申购新车列表】
     * @desc【申购新车列表】
     * @method【post】
     * @table【car_audit,company,car_brand,passenger,car】
     * @group【life】
     * @param【
     * fields $ string $ * $ 字段名称 #
     * where_json $ json $ {"apply_buycar_no":["like","%王%"],"company_name":["like","%王%"],"state":["in","1"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function buyList(){

        $report    = new CarlifeValidate();
        $param     = $report->scene('report')->getCurrentData();
        $report->goCheck($param);
        $where     = json_decode($param['where_json'],true);
        $fields     = json_decode($param['fields'],true);
        $page     = json_decode($param['page'],true);
        $pagenum     = json_decode($param['pagenum'],true);
        $data['data'] = (new model\CarAudit())
            ->alias('a')
            ->join('company c', 'a.company_id = c.company_id', 'left')
            ->join('car_brand d', 'a.car_brand_id = d.car_brand_id', 'left')
            ->join('car_brand e', 'a.car_series_id = e.car_brand_id', 'left')
            ->join('car_brand f', 'a.car_model_id = f.car_brand_id', 'left')
            ->join('passenger g', 'a.passenger_id = g.passenger_id', 'left')
            ->join('car h', 'a.car_id = h.car_id', 'left')
            ->join('car_type i', 'i.car_type_id = h.car_type_id', 'left')
            ->field('a.*,g.name passenger_name,c.company_name,d.name brand,e.name type_name,f.name model_name,h.number,i.car_type_name')
            ->where($where)
            ->order('date desc')
            ->page($page,$pagenum)
            ->select();
        $data['count'] = (new model\CarAudit())
            ->where($where)
            ->count();
        return $this->res($data);
//        list($code,$data) = (new model\CarAudit())->buyList($param['fields'],$where,$param['page'],$param['pagenum']);
//        if($code==1){
//            return $this->retSucc($data);
//        }else{
//            return $this->retError($data);
//        }
    }

    /**
     * @name【1.2新增申购新车】
     * @desc【新增申购新车】
     * @method【post】
     * @table【car_audit】
     * @group【life】
     * @param【
     * company_id $ int $ 123 $ 公司ID $ 1 #
     * user_name $ string $ anc $ 申请人 $ 1 #
     * car_brand_id $ int $ 123 $ 品牌 $ 1 #
     * car_series_id $ int $ 123 $ 车型 $ 1 #
     * car_model_id $ int $ 123 $ 车系 $ 1 #
     * people $ int $ 123 $ 载客数 $ 1 #
     * money $ int $ 123 $ 预算 $ 1 #
     * buyto $ string $ anc $ 用途 $ 1 #
     * whybuy $ string $ anc $ 理由 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function buyAdd(){
        $param = input('param.');

        list($code,$data) =  (new model\CarAudit())->buyEdit($param);

        if($code==1){
            $info['code'] = $code;
            $info['msg']  = '';
            $info['time'] = time();
            if(is_array($data)){
                $info         = array_merge($info,$data);
            }else{
                $info['data'] = $data;
            }
            return json($info);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【1.3审核申购新车】
     * @desc【审核申购新车】
     * @method【post】
     * @table【car_audit】
     * @group【life】
     * @param【
     * car_audit_id $ int $ 123 $ ID号 $ 1 #
     * company_id $ int $ 123 $ 公司ID #
     * user_name $ string $ anc $ 申请人 #
     * car_brand_id $ int $ 123 $ 品牌 #
     * car_series_id $ int $ 123 $ 车型 #
     * car_model_id $ int $ 123 $ 车系 #
     * people $ int $ 123 $ 载客数 #
     * money $ int $ 123 $ 预算 #
     * buyto $ string $ anc $ 用途 #
     * whybuy $ string $ anc $ 理由 #
     * state $ string $ anc $ 状态 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function buyCheck(){
        $param = input('param.');

        list($code,$data) =  (new model\CarAudit())->buyEdit($param);

        if($code==1){
            $info['code'] = $code;
            $info['msg']  = '';
            $info['time'] = time();
            if(is_array($data)){
                $info         = array_merge($info,$data);
            }else{
                $info['data'] = $data;
            }
            return json($info);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【1.4删除申购新车】
     * @desc【删除申购新车】
     * @method【post】
     * @table【car_audit】
     * @group【life】
     * @param【
     * car_audit_id $ int $ 123 $ ID号 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function buyDelete(){

        $param = input('param.');

        list($code,$data) =  (new model\CarAudit())->buyDelete($param['car_audit_id']);

        if($code==1){
            $info['code'] = $code;
            $info['msg']  = '';
            $info['time'] = time();
            if(is_array($data)){
                $info         = array_merge($info,$data);
            }else{
                $info['data'] = $data;
            }
            return json($info);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【2.1报废列表】
     * @desc【报废列表】
     * @method【post】
     * @table【car_auction,car,car_brand,car_use,car_type,company】
     * @group【life】
     * @param【
     * fields $ string $ car_scrap_id,company_name,number,state $ 字段名称 #
     * where_json $ json $ {"car_auction_id":["like","%王%"],"company_name":["like","%王%"],"number":["like","%王%"],"state":["in","1"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function scrapList(){

        $report    = new CarlifeValidate();
        $param     = $report->scene('report')->getCurrentData();
        $report->goCheck($param);
        $where     = json_decode($param['where_json'],true);
        $fields     = json_decode($param['fields'],true);
        $page     = json_decode($param['page'],true);
        $pagenum     = json_decode($param['pagenum'],true);
        $data['data'] = (new model\CarScrap())
            ->alias('a')
            ->join('car c','a.car_id = c.car_id','left')
            ->join('car_brand d','c.car_brand_id = d.car_brand_id','left')
            ->join('car_type h','c.car_type_id = h.car_type_id','left')
            ->join('company i','a.company_id = i.company_id','left')
            ->field('a.*,c.number,c.mileage,c.car_age,h.car_type_name,i.company_name,d.name brand')
            ->where($where)
            ->order('date desc')
            ->page($page,$pagenum)
            ->select();
        $data['count'] = (new model\CarScrap())
            ->where($where)
            ->count();
        return $this->res($data);
//        list($code,$data) = (new model\CarScrap())->scrapList($param['fields'],$where,$param['page'],$param['pagenum']);
//        if($code==1){
//            return $this->retSucc($data);
//        }else{
//            return $this->retError($data);
//        }
    }
    /**
     * @name【2.2新增报废】
     * @desc【新增报废】
     * @method【post】
     * @table【car_scrap,car】
     * @group【life】
     * @param【
     * car_id $ int $ 10 $ 车辆ID $ 1 #
     * why $ string $ abc $ 理由 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function scrapAdd(){
        $param = input('param.');

        list($code,$data) =  (new model\CarScrap())->scrapEdit($param);

        if($code==1){
            $info['code'] = $code;
            $info['msg']  = '';
            $info['time'] = time();
            if(is_array($data)){
                $info         = array_merge($info,$data);
            }else{
                $info['data'] = $data;
            }
            return json($info);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【2.3审核报废】
     * @desc【审核报废】
     * @method【post】
     * @table【car_scrap】
     * @group【life】
     * @param【
     * car_scrap_id $ int $ 1 $ 报废申请ID $ 1 #
     * provincial_administration_result $ int $ 1 $ 省管局批复  #
     * bureau_of_finance_result $ int $ 1 $ 财政局批复  #
     * scrap_document $ string $  $ 报废文件 #
     * disposition_of_assets $ string $  $ 资产处置批复文件 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function scrapCheck(){
        $param = input('param.');

        list($code,$data) =  (new model\CarScrap())->scrapEdit($param);

        if($code==1){
            $info['code'] = $code;
            $info['msg']  = '';
            $info['time'] = time();
            if(is_array($data)){
                $info         = array_merge($info,$data);
            }else{
                $info['data'] = $data;
            }
            return json($info);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【2.4删除报废】
     * @desc【删除报废】
     * @method【post】
     * @table【car_scrap,car】
     * @group【life】
     * @param【
     * car_scrap_id $ int $ 1 $ 报废申请ID $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function scrapDelete(){

        $param = input('param.');
        if($param['car_scrap_id']) {
            list($code, $data) = (new model\CarScrap())->scrapDelete($param['car_scrap_id']);
        }
        if($code==1){
            $info['code'] = $code;
            $info['msg']  = '';
            $info['time'] = time();
            if(is_array($data)){
                $info         = array_merge($info,$data);
            }else{
                $info['data'] = $data;
            }
            return json($info);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【3.1拍卖列表】
     * @desc【拍卖列表】
     * @method【post】
     * @table【car_scrap,car,car_brand,car_use,car_type,company】
     * @group【life】
     * @param【
     * fields $ string $ car_auction_id,company_name,number,state $ 字段名称 #
     * where_json $ json $ {"car_auction_id":["like","%王%"],"company_name":["like","%王%"],"number":["like","%王%"],"state":["in","1"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function sellList(){

        $report    = new CarlifeValidate();
        $param     = $report->scene('report')->getCurrentData();
        $report->goCheck($param);
        $where     = json_decode($param['where_json'],true);
        $fields     = json_decode($param['fields'],true);
        $page     = json_decode($param['page'],true);
        $pagenum   = json_decode($param['pagenum'],true);
        $data['data'] = (new model\CarAuction())
            ->alias('a')
            ->join('car c', 'a.car_id = c.car_id', 'left')
            ->join('car_brand d', 'c.car_brand_id = d.car_brand_id', 'left')
//            ->join('car_brand e', 'c.car_series_id = e.car_brand_id', 'left')
//            ->join('car_brand f', 'c.car_model_id = f.car_brand_id', 'left')
            ->join('car_type h', 'c.car_type_id = h.car_type_id', 'left')
            ->join('company i', 'a.company_id = i.company_id', 'left')
            ->field('a.*,c.number,c.car_age,c.mileage,i.company_name,d.name brand,h.car_type_name')
            ->where($where)
            ->order('date desc')
            ->page($page, $pagenum)
            ->select();
        $data['count'] = (new model\CarAuction())
            ->where($where)
            ->count();
        return $this->res($data);
//        list($code,$data) = (new model\CarAuction())->sellList($param['fields'],$where,$param['page'],$param['pagenum']);
//        if($code==1){
//            return $this->retSucc($data);
//        }else{
//            return $this->retError($data);
//        }
    }

    /**
     * @name【3.2新增拍卖】
     * @desc【新增拍卖】
     * @method【post】
     * @table【car_auction,car】
     * @group【life】
     * @param【
     * car_id $ int $ 123 $ 车ID $ 1 #
     * why $ string $ anc $ 理由  #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function sellAdd(){
        $param = input('param.');

        list($code,$data) =  (new model\CarAuction())->sellEdit($param);

        if($code==1){
            $info['code'] = $code;
            $info['msg']  = '';
            $info['time'] = time();
            if(is_array($data)){
                $info         = array_merge($info,$data);
            }else{
                $info['data'] = $data;
            }
            return json($info);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【3.3审核拍卖】
     * @desc【审核拍卖】
     * @method【post】
     * @table【car_auction】
     * @group【life】
     * @param【
     * car_auction_id $ int $ 1 $ 申请ID $ 1 #
     * provincial_administration_result $ string $ 1 $ 省局批复 #
     * bureau_of_finance_result $ string $ 1 $ 财政局批复 #
     * auction_process $ string $ 123 $ 拍卖过程 #
     * turn_over $ string $ 9 $ 是否上缴国库 #
     * auction_image $ string $ 123 $ 拍卖照片/照片 #
     * bureau_of_finance_file $ string $ 123 $ 资产处置批复文件 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function sellCheck(){
        $param = input('param.');

        if($param['car_auction_id']) {
            list($code, $data) = (new model\CarAuction())->sellEdit($param);
        }

        if($code==1){
            $info['code'] = $code;
            $info['msg']  = '';
            $info['time'] = time();
            if(is_array($data)){
                $info         = array_merge($info,$data);
            }else{
                $info['data'] = $data;
            }
            return json($info);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【3.4删除拍卖】
     * @desc【删除拍卖】
     * @method【post】
     * @table【car_auction,car】
     * @group【life】
     * @param【
     * car_auction_id $ int $ 1 $ 拍卖申请ID $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function sellDelete(){

        $param = input('param.');
        if($param['car_auction_id']) {
            list($code, $data) = (new model\CarAuction())->sellDelete($param['car_auction_id']);
        }
        if($code==1){
            $info['code'] = $code;
            $info['msg']  = '';
            $info['time'] = time();
            if(is_array($data)){
                $info         = array_merge($info,$data);
            }else{
                $info['data'] = $data;
            }
            return json($info);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【4.1车辆品牌/车型/车系】
     * @desc【车辆品牌/车型/车系】
     * @method【post】
     * @table【car_brand】
     * @group【life】
     * @param【
     * parent_id $ int $ 0 $ 父节点(输入0获取所有品牌,输入品牌ID获取) $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function brands(){

        $report    = new CarBrandValidate();
        $param     = $report->scene('brand')->getCurrentData();
        $report->goCheck($param);
        $parent_id     = json_decode($param['parent_id'],true);
        $data['data'] = (new model\CarBrand())
            ->where('parent_id',$parent_id)
            ->select();
        $data['count'] = count($data['data']);

        return $this->res($data);
    }

    /**
     * @name【5.1车牌号相关】
     * @desc【车牌号相关(消牌,上牌,更改车牌)】
     * @method【post】
     * @table【car_number_edit】
     * @group【life】
     * @param【
     * delete $ int $ 2 $ 是否删除车牌(1:删除,2:不删除)   #
     * car_id $ int $ 137 $ 车辆ID  $1  #
     * car_number $ string $ 0 $ 新车牌号   #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function car_number_edit(){

        $report    = new CarlifeValidate();
        $param     = $report->scene('car_number_edit')->getCurrentData();
        $report->goCheck($param);
        $delete     = $param['delete'];
        $car_id     = $param['car_id'];
        $car_number     = $param['car_number'];
        if($delete == 1 && $car_id){
            $data = (new model\Car())
                ->save([
                    'number'  => '',
                ],['car_id' => $car_id]);
        }
        elseif($car_id){
            $data = (new model\Car())
                ->save([
                    'number'  => $car_number,
                ],['car_id' => $car_id]);
            (new model\CarAudit())
                ->save([
                    'state'  => 6,
                ],['car_id' => $car_id]);
        }

        return $this->res($data);
    }

    /**
     * @name【6.1增加车辆】
     * @desc【新增车辆,根据生命周期的需求更改过】
     * @method【post】
     * @table【car】
     * @group【】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * company_id $ int $ 1 $ 单位id $ 1 #
     * entrust_company_id $ int $ 0 $ 委托公司为0则不委托 $ 1 #
     * car_type_id $ int $ 1 $ 车型id $ 1 #
     * car_brand_id $ int $ 1 $ 车辆品牌id $ 1 #
     * car_model_id $ int $ 1 $ 车型 #
     * car_series_id $ int $ 1 $ 系列 #
     * number $ string $ 默认值 $ 车牌 $ 1 #
     * source $ int $ 1 $ 车辆来源 #
     * structure $ int $ 1 $ 车型结构1两厢 2三厢 3 suv 4其他 $ 1 #
     * colour $ int $ 1 $ 车身颜色 #
     * gearbox_type $ int $ 1 $ 变速类型 1手动 2自动 3 手自动一体 $ 1 #
     * displacement $ int $ 1 $ 排量 $ 1 #
     * car_age $ int $ 1 $ 车龄 #
     * energy_type $ int $ 1 $ 能源类型 1 电 2汽油 3柴油 4 混合 #
     * engine_no $ string $ 2377777 $ 发动机号 $ 1 #
     * chassis_no $ string $ 2377777 $ 底盘号 $ 1 #
     * vin $ string $ 2377777 $ 车辆识别号 $ 1 #
     * carry $ int $ 1 $ 承载人数 $ 1 #
     * buy_date $ date $ 1997-1-1 $ 购买日期 #
     * buy_money $ int $ 1 $ 购买金额 #
     * mileage $ int $ 1 $ 行驶里程 #
     * driving_license_issued $ date $ 1997-1-1 $ 行驶证发证日期 $ 1 #
     * driving_license_effective $ date $ 1997-1-1 $ 行驶证有效日期 $ 1 #
     * prop $ int $ 1 $ 车辆性质 #
     * state $ int $ 1 $ 车辆状态 1启用 9禁用 $ 1 #
     * driving_license_img $ string $  $ 行驶证正本图片 #
     * driving_license_img2 $ string $  $ 行驶证副本图片 #
     * front_img $ string $  $ 车正面图片 #
     * back_img $ string $  $ 车辆背面图片 #
     * side_img $ string $  $ 车辆45度侧面图片 #
     * engine_img $ string $  $ 车辆发动机号图片 #
     * business_insurance_company $ string $  $ 商业险保险公司 #
     * business_policy_no $ string $  $ 商业险保单号 #
     * business_policy_effective $ string $  $ 商业险保单有效期 #
     * phone $ string $ 13987897655 $ 商业险报销公司电话 #
     * rent_company $ string $  $ 租赁公司 #
     * business_policy_img $ string $  $ 商业险保单图片 #
     * compulsory_policy_no $ string $  $ 交强险保单号 #
     * compulsory_policy_effective $ date $ 1997-1-1 $ 交强险保险有效期#
     * compulsory_policy_img $ string $  $ 交强险#
     * register_time $ date $ 1997-1-1 $ 注册时间  #
     * car_audit_id $ int $ 1 $ 新购车辆单ID  #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * maintenance_id $ int $ 1 $ 新增成功的车辆ID#
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function carAdd(){

        $validate = new CarValidate();
        // 获取所有请求参数
        $params = $validate->scene('add')->goCheck()->getCurrentData();

        $car = (new model\Car()) ->createOrUpdate($params);

        if($params['car_audit_id']){
            Db::name('car_audit')->where('car_audit_id', $params['car_audit_id'])->update(['state' => '4']);
        }

        return $this->retSucc(['car_id' => $car->car_id]);
    }

    /**
     * @name【6.2编辑车辆】
     * @desc【编辑车辆,根据生命周期的需求更改过】
     * @method【post】
     * @table【car】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * car_id $ int $ 1 $ 车辆id $ 1 #
     * company_id $ int $ 1 $ 单位id $ 1 #
     * entrust_company_id $ int $ 0 $ 委托公司为0则不委托 $ 1 #
     * car_type_id $ int $ 1 $ 车型id $ 1 #
     * car_brand_id $ int $ 1 $ 车辆品牌id $ 1 #
     * car_model_id $ int $ 1 $ 车型 #
     * car_series_id $ int $ 1 $ 系列 #
     * number $ string $ 默认值 $ 车牌 $ 1 #
     * source $ int $ 1 $ 车辆来源 #
     * structure $ int $ 1 $ 车型结构1两厢 2三厢 3 suv 4其他 $ 1 #
     * colour $ int $ 1 $ 车身颜色 #
     * gearbox_type $ int $ 1 $ 变速类型 1手动 2自动 3 手自动一体 $ 1 #
     * displacement $ int $ 1 $ 排量 $ 1 #
     * car_age $ int $ 1 $ 车龄 #
     * energy_type $ int $ 1 $ 能源类型 1 电 2汽油 3柴油 4 混合 #
     * engine_no $ string $ 2377777 $ 发动机号 $ 1 #
     * chassis_no $ string $ 2377777 $ 底盘号 $ 1 #
     * vin $ string $ 2377777 $ 车辆识别号 $ 1 #
     * carry $ int $ 1 $ 承载人数 $ 1 #
     * buy_date $ date $ 1997-1-1 $ 购买日期 #
     * buy_money $ int $ 1 $ 购买金额 #
     * mileage $ int $ 1 $ 行驶里程 #
     * driving_license_issued $ date $ 1997-1-1 $ 行驶证发证日期 $ 1 #
     * driving_license_effective $ date $ 1997-1-1 $ 行驶证有效日期 $ 1 #
     * prop $ int $ 1 $ 车辆性质 #
     * state $ int $ 1 $ 车辆状态 1启用 9禁用 $ 1 #
     * driving_license_img $ string $  $ 行驶证正本图片 #
     * driving_license_img2 $ string $  $ 行驶证副本图片 #
     * front_img $ string $  $ 车正面图片 #
     * back_img $ string $  $ 车辆背面图片 #
     * side_img $ string $  $ 车辆45度侧面图片 #
     * engine_img $ string $  $ 车辆发动机号图片 #
     * business_insurance_company $ string $  $ 商业险保险公司 #
     * business_policy_no $ string $  $ 商业险保单号 #
     * business_policy_effective $ string $  $ 商业险保单有效期 #
     * phone $ string $ 13987897655 $ 商业险报销公司电话 #
     * rent_company $ string $  $ 租赁公司 #
     * business_policy_img $ string $  $ 商业险保单图片 #
     * compulsory_policy_no $ string $  $ 交强险保单号 #
     * compulsory_policy_effective $ date $ 1997-1-1 $ 交强险保险有效期#
     * compulsory_policy_img $ string $  $ 交强险#
     * register_time $ date $ 1997-1-1 $ 注册时间  #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * updated $ int $  1 $ 更新记录条数#
     * 】
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\exception\DbException
     */
    public function carEdit(){
        // 校验请求参数
        $validate = new CarValidate();
        // 获取所有请求参数
        $params = $validate->scene('edit')->goCheck()->getCurrentData();

        $result = (new model\Car()) ->createOrUpdate($params);

        return $this->retSucc(['updated' => $result]);
    }

    /**
     * @name【6.3车辆列表】
     * @desc【】
     * @method【post】
     * @table【car】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * fields $ string $ driver_id,name $ 字段名称 #
     * where_json $ json $ {"order_id":["in","6,7,8"],"name":["like","%王%"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function carList(){
        $report    = new CarValidate();
        $param     = $report->scene('list')->goCheck()->getCurrentData();

        $where     = json_decode($param['where_json'],true);

        list($code,$data) = (new model\Car())->carLlist($param['fields'],$where,$param['page'],$param['pagenum']);
        if($code==1){
            return $this->retSucc($data);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【7.1增加司机】
     * @desc【】
     * @method【post】
     * @table【】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * user_id $ int $ 1 $ 归属用户id $ 1 #
     * company_id $ int $ 1 $ 单位id $ 1 #
     * name  $ string $ 张吴 $ 姓名 $ 1 #
     * id_card  $ string $ 350882198810171122 $ 身份证号码 $ 1 #
     * age $ int $ 28 $ 年龄 $ 1 #
     * birthday  $ date $ 1992-1-1 $ 出生日期 $ 1 #
     * sex $ int $ 1 $ 性别1男2女 $ 1 #
     * phone $ string $ 13559203611 $ 手机号码 $ 1 #
     * add $ string $ 泉州 $ 居住地址 #
     * driving_age $ string $ 3507 $ 身份证号码 $ 1 #
     * original_position $ string $ 开发 $ 原职位 #
     * language $ string $ 1 $ 语言 1普通话 $ 1 #
     * head_img $ string $   $ 头像地址 #
     * half_body_img $ string $  $ 半身照片 #
     * body_img $ string $  $ 名称  #
     * insurance_img $ string $  $ 保险图片  #
     * contract_img $ string $  $ 合同图片 #
     * id_img  $ string $  $ 身份证正面 #
     * id_img_back $ string $  $ 身份证背面 #
     * driver_license_img $ string $  $ 驾驶证照片  #
     * residence_permit_img $ string $  $ 居住证图片  #
     * bank_card $ string $ 622909408765565787 $ 银行卡号 #
     * wechat $ string $ 13959203655 $ 微信号 #
     * alipay $ string $ 13959203655 $ 支付宝#
     * register_time $ date $ 2017-1-1 $ 注册时间 #
     * driver_no $ string $ 默认值 $ 司机工号 #
     * bank $ string $ 中国银行 $ 开户行 #
     * edit_time $ date $ 2017-1-1 $ 编辑时间 #
     * authorized $ int $ 0 $ 是否编制内 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息
     * 】
     */
    public function driverAdd(){
        // 校验请求参数
        $validate = new \app\open\validate\DriverValidate();
        // 获取所有请求参数
        $params   = $validate->scene('add')->goCheck()->getCurrentData();
        $driver   = (new \app\open\model\Driver()) ->createOrUpdate($params);
        return $this->retSucc(['driver_id' => $driver->driver_id]);
    }

    /**
     * @name【7.2编辑司机】
     * @desc【】
     * @method【post】
     * @table【】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * driver_id $ int $ 1 $ 司机id $ 1 #
     * user_id $ int $ 1 $ 归属用户id $ 1 #
     * company_id $ int $ 1 $ 单位id $ 1 #
     * name  $ string $ 章三 $ 姓名 $ 1 #
     * id_card  $ string $ 3507 $ 身份证号码 $ 1 #
     * age $ int $ 28 $ 年龄 $ 1 #
     * birthday  $ date $ 1992-1-1 $ 出生日期 $ 1 #
     * sex $ int $ 1 $ 性别1男2女 $ 1 #
     * phone $ string $ 135 $ 手机号码 $ 1 #
     * add $ string $ 泉州 $ 居住地址 #
     * driving_age $ string $ 3507 $ 身份证号码 $ 1 #
     * original_position $ string $ 开发 $ 原职位 #
     * language $ string $ 1 普通话 $ 语言 $ 1 #
     * head_img $ string $ upload/1.jpg  $ 头像地址 #
     * half_body_img $ string $ upload/1.jpg $ 半身照片 #
     * body_img $ string $ 默认值 $ 名称  #
     * insurance_img $ string $ 默认值 $ 保险图片  #
     * contract_img $ string $ 默认值 $ 合同图片 #
     * id_img  $ string $ 默认值 $ 身份证正面 #
     * id_img_back $ string $ 默认值 $ 身份证背面 #
     * driver_license_img $ string $ 默认值 $ 驾驶证照片  #
     * residence_permit_img $ string $ 默认值 $ 居住证图片  #
     * bank_card $ string $ 6222 $ 银行卡号 #
     * wechat $ string $ hello $ 微信号 #
     * alipay $ string $ 139 $ 支付宝#
     * register_time $ date $ 2017-1-1 $ 注册时间 #
     * driver_no $ string $ 默认值 $ 司机工号 #
     * bank $ string $ 中国银行 $ 开户行 #
     * edit_time $ date $ 2017-1-1 $ 编辑时间
     * authorized $ int $ 0 $ 是否编制内 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息
     * 】
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\exception\DbException
     * @throws  \app\base\exception\RecordHasExistException
     */
    public function driverEdit(){
        // 校验请求参数
        $validate = new \app\open\validate\DriverValidate();
        // 获取所有请求参数
        $params   = $validate->scene('edit')->goCheck()->getCurrentData();
        $result   = (new \app\open\model\Driver()) ->createOrUpdate($params);
        return $this->retSucc(['updated' => $result]);
    }

    /**
     * @name【7.3司机列表】
     * @desc【】
     * @method【post】
     * @table【】
     * @param【
     * fields $ string $ driver_id,name $ 字段名称 #
     * where_json $ json $ {"order_id":["in","6,7,8"],"name":["like","%王%"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function driverList(){
        $report    = new \app\open\validate\CommonValidate();
        $param     = $report->scene('list')->goCheck()->getCurrentData();
        $where     = json_decode($param['where_json'],true);
        list($code,$data) = (new model\Driver())->getDriverList($param['fields'],$where,$param['page'],$param['pagenum']);
        if($code==1){
            return $this->retSucc($data);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【7.4司机评价列表】
     * @desc【】
     * @method【post】
     * @table【】
     * @param【
     * fields $ string $ driver_id,name $ 字段名称 #
     * where_json $ json $ {"order_id":["in","6,7,8"],"name":["like","%王%"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * data['orders_num'] $ int $ $ 订单数 #
     * data['km_sum'] $ int $ $ 里程数(单位km) #
     * data['time_sum'] $ int $ $ 总用时(单位未知) #
     * data['star_avg'] $ int $ $ 平均评价 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function driverAttendanceList(){
        $report    = new \app\open\validate\CommonValidate();
        $param     = $report->scene('list')->goCheck()->getCurrentData();
        $where     = json_decode($param['where_json'],true);
        $fields     = json_decode($param['fields'],true);
        $page     = json_decode($param['page'],true);
        $pagenum   = json_decode($param['pagenum'],true);
        $data['data'] = (new model\Driver())
//            ->alias('d')
//            ->join('company c', 'c.company_id = d.company_id', 'left')
            ->field('driver_id,name,company_id')
            ->where($where)
            ->page($page, $pagenum)
            ->select();
        foreach ($data['data'] as $key => $val) {
            $data['data'][$key]['company_name'] = (new model\Company())
                ->where('company_id',$data['data'][$key]['company_id'])
                ->value('company_name');
            $data['data'][$key]['orders_num'] = (new model\Order())
                ->where('driver_id',$data['data'][$key]['driver_id'])
                ->count();
            $data['data'][$key]['km_sum'] = (new model\Order())
                ->alias('a')
                ->where('driver_id',$data['data'][$key]['driver_id'])
                ->join('order_fee b', 'a.order_id = b.order_id', 'left')
                ->sum('meter');
            $data['data'][$key]['km_sum'] /= 1000;
            $data['data'][$key]['time_sum'] = (new model\Order())
                ->alias('a')
                ->where('driver_id',$data['data'][$key]['driver_id'])
                ->join('order_fee b', 'a.order_id = b.order_id', 'left')
                ->sum('use_time');
            $data['data'][$key]['star_avg'] = (new model\Order())
                ->where('driver_id',$data['data'][$key]['driver_id'])
                ->avg('star');
        }
        $data['count'] = (new model\Driver())
            ->where($where)
            ->count();
        return $this->res($data);
    }

    /**
     * @name【8.1划转列表】
     * @desc【】
     * @method【post】
     * @table【】
     * @param【
     * fields $ string $ * $ 字段名称 #
     * where_json $ json $ {"apply_buycar_no":["like","%王%"],"company_name":["like","%王%"],"state":["in","1"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function transferList(){
        $report    = new CarlifeValidate();
        $param     = $report->scene('report')->getCurrentData();
        $report->goCheck($param);
        $where     = json_decode($param['where_json'],true);
        $fields = json_decode($param['fields'],true);
        $page = json_decode($param['page'],true);
        $pagenum = json_decode($param['pagenum'],true);
        $transfer = (new model\CarTransfer())
            ->alias('a')
            ->where($where)
            ->field('a.*,b.number,c.company_name from_company_name,d.company_name goto_company_name')
            ->join('car b','b.car_id = a.car_id')
            ->join('company c','a.from_company_id = c.company_id','left')
            ->join('company d','a.goto_company_id = d.company_id','left')
            ->page($page,$pagenum)
            ->select();
        $data['data'] = $transfer;
        $data['count'] = (new model\CarTransfer())
            ->where($where)
            ->count();
        return $this->res($data);
    }

    /**
     * @name【8.2新增划转】
     * @desc【】
     * @method【post】
     * @table【】
     * @param【
     * goto_company_id $ int $  $ 要转给哪个公司  $1 #
     * car_id $ int $ $ 哪辆车 $1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function transferAdd(){
        $report    = new CarlifeValidate();
        $param     = $report->scene('transferAdd')->getCurrentData();
        $report->goCheck($param);
        $car = (new model\Car())
            ->where('car_id',$param['car_id'])
            ->find();
        $transfer = (new model\CarTransfer());
        $transfer->data([
            'from_company_id' => $car['company_id'],
            'goto_company_id' => $param['goto_company_id'],
            'car_id' => $param['car_id'],
            'state' => '1',
            'transfer_no' => (new model\Common())->createSn()
        ]);
        $transfer->save();
        return $this->res($transfer);
    }

    /**
     * @name【8.3审核划转】
     * @desc【】
     * @method【post】
     * @table【】
     * @param【
     * car_transfer_id $ int $  $ 划转ID  $1 #
     * provincial_administration_result $ int $ $ 省管局批复  #
     * bureau_of_finance_result $ int $ $ 财政局批复  #
     * disposition_of_assets $ int $ $ 资产处置批复  #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function transferEdit(){
        $report    = new CarlifeValidate();
        $param     = $report->scene('transferEdit')->getCurrentData();
        $report->goCheck($param);
        $CarTransfer = (new model\CarTransfer())
            ->where('car_transfer_id',$param['car_transfer_id'])
            ->find();
        if($param['provincial_administration_result'] == '9' && $CarTransfer['state'] < '3') {
            $CarTransfer->data([
                'provincial_administration_result' => '9',
                'provincial_administration_result_date' => date("Y-m-d H:i:s"),
                'state' => '3'
            ]);
            $CarTransfer->save();
        }
        elseif ($param['bureau_of_finance_result'] == '9' && $CarTransfer['state'] < '3'){
            $CarTransfer->data([
                'bureau_of_finance_result' => '9',
                'bureau_of_finance_result_date' => date("Y-m-d H:i:s"),
                'state' => '3'
            ]);
            $CarTransfer->save();
        }
        elseif ($param['provincial_administration_result'] == '1' && $CarTransfer['state'] < '3'){
            if($CarTransfer['bureau_of_finance_result'] == 1){
                $state = '4';
            }
            else{
                $state = '2';
            }
            $CarTransfer->data([
                'provincial_administration_result' => '1',
                'provincial_administration_result_date' => date("Y-m-d H:i:s"),
                'state' => $state
            ]);
            $CarTransfer->save();
        }
        elseif ($param['bureau_of_finance_result'] == '1' && $CarTransfer['state'] < '3'){
            if($CarTransfer['provincial_administration_result'] == 1){
                $state = '4';
            }
            else{
                $state = '2';
            }
            $CarTransfer->data([
                'bureau_of_finance_result' => '1',
                'bureau_of_finance_result_date' => date("Y-m-d H:i:s"),
                'state' => $state
            ]);
            $CarTransfer->save();
        }
        elseif ($param['disposition_of_assets'] && $CarTransfer['state'] == '4'){
            if($param['disposition_of_assets']){
                $Car = (new model\Car())
                    ->where('car_id',$CarTransfer['car_id'])
                    ->find();
                $Car->data([
                    'company_id' => $CarTransfer['goto_company_id']
                ]);
                $Car->save();
                $CarTransfer->data([
                    'disposition_of_assets' => $param['disposition_of_assets'],
                    'disposition_of_assets_date' => date("Y-m-d H:i:s"),
                    'state' => '5'
                ]);
                $CarTransfer->save();
            }
        }
        return $this->res($CarTransfer);
    }

    /**
     * @name【8.2删除划转】
     * @desc【】
     * @method【post】
     * @table【】
     * @param【
     * car_transfer_id $ int $  $ 划转ID  $1 #
     * delete $ int $ $ 删除标记(1删除) $1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function transferDelete(){
        $report    = new CarlifeValidate();
        $param     = $report->scene('transferDelete')->getCurrentData();
        $report->goCheck($param);
        if($param['delete'] == '1') {
            $transfer = (new model\CarTransfer())
                ->where('car_transfer_id', $param['car_transfer_id'])
                ->find();
            $transfer->data([
                'delete_time' => date("YmdHis"),
            ]);
            $transfer->save();
        }
        return $this->res($transfer);
    }
}